"""
时间处理工具模块
提供时间解析、格式化等工具函数
"""

from datetime import datetime
import re
from typing import Optional, Tuple


def parse_datetime(time_str: str) -> datetime:
    """
    解析时间字符串，支持多种格式
    
    Args:
        time_str: 时间字符串，支持以下格式：
            - ISO格式: "2024-01-15T10:30:00"
            - 标准格式: "2024-01-15 10:30:00"
            - 日期格式: "2024-01-15"
    
    Returns:
        datetime对象
    
    Raises:
        ValueError: 时间格式不正确时抛出
    """
    if not time_str:
        raise ValueError("时间字符串不能为空")
    
    # 去除首尾空格
    time_str = time_str.strip()
    
    # 尝试ISO格式
    try:
        return datetime.fromisoformat(time_str)
    except ValueError:
        pass
    
    # 尝试标准格式
    try:
        return datetime.strptime(time_str, "%Y-%m-%d %H:%M:%S")
    except ValueError:
        pass
    
    # 尝试日期格式
    try:
        return datetime.strptime(time_str, "%Y-%m-%d")
    except ValueError:
        pass
    
    # 尝试其他常见格式
    formats = [
        "%Y-%m-%dT%H:%M:%S",
        "%Y-%m-%dT%H:%M:%S.%f",
        "%Y/%m/%d %H:%M:%S",
        "%Y/%m/%d",
        "%m/%d/%Y %H:%M:%S",
        "%m/%d/%Y",
    ]
    
    for fmt in formats:
        try:
            return datetime.strptime(time_str, fmt)
        except ValueError:
            continue
    
    raise ValueError(f"不支持的时间格式: {time_str}")


def parse_time_range(time_range_str: str) -> Tuple[Optional[str], Optional[str]]:
    """
    解析时间范围字符串
    
    Args:
        time_range_str: 时间范围字符串，支持以下格式：
            - "start_time,end_time"
            - "[start_time,end_time]"
            - "(start_time,end_time)"
    
    Returns:
        (start_time, end_time) 元组，如果某个时间不存在则为None
    
    Raises:
        ValueError: 时间范围格式不正确时抛出
    """
    if not time_range_str:
        return None, None
    
    # 去除首尾空格
    time_range_str = time_range_str.strip()
    
    # 处理方括号和圆括号格式
    if time_range_str.startswith('[') and time_range_str.endswith(']'):
        time_range_str = time_range_str[1:-1]
    elif time_range_str.startswith('(') and time_range_str.endswith(')'):
        time_range_str = time_range_str[1:-1]
    
    # 按逗号分割
    parts = time_range_str.split(',')
    if len(parts) != 2:
        raise ValueError(f"时间范围格式错误，应为 'start_time,end_time' 格式: {time_range_str}")
    
    start_time = parts[0].strip()
    end_time = parts[1].strip()
    
    # 处理空值
    start_time = start_time if start_time else None
    end_time = end_time if end_time else None
    
    return start_time, end_time 